1. Field of the Invention
This invention relates generally to computer software and, more particularly, to a method and an apparatus for using digests to achieve fault tolerance in computer hardware and/or software.
2. Description of the Related Art
Computers make mistakes and often crash, particularly computers using computer hardware and/or software that is flaky. The vast majority of computers operate in isolation. These isolated computers run and, if they make a miscalculation and/or if they are bumped or jostled and have a temporary failure and/or if they are powered off, the calculation the isolated computer is performing may be lost.
A small number of computers have been designed to be fault tolerant in one of several ways. Conventionally, a group of three or more computers have been made to cooperate tightly. The three or more computers typically check one another constantly. If one of the three or more computers makes a memory reference and/or an input/output (I/O) reference that is different from the memory reference and/or the input/output (I/O) reference made by the others of the three or more computers, then the computer behaving differently is treated as failing.
In another conventional way to achieve fault tolerance, a group of two computers have been made to run in lock-step. Whenever the two computers disagree, it is sometimes possible to have enough of the corresponding “state” around in each of the respective computers that the calculation on which the two computers disagree can be re-executed. In this way, the failing computer can be identified.
Yet another conventional way to implement fault tolerance is to have computer programs be explicitly written to check themselves and each other. However, all these conventional ways to implement fault tolerance have the drawbacks that they either require tight and/or lock-step cooperation between the computer hardware and/or massive rewrites of user-level computer software.
The present invention is directed to overcoming, or at least reducing the effects of, one or more of the problems set forth above.